import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;
import java.util.List;

/**
 * Tramo de camino recto
 * 
 * @Daniel Varela
 * @1.0
 */
public class Recta extends Camino
{
    private long t;
    private int x;
    
    /**
     * Costruccion de la clase 
     * @param pos es la rotacion que tine el camino
     */
    public Recta(int pos){
        super(pos);
        if(pos == 1)
            this.turn(90);
        x=0;
        t=0;
    }
    
    public void act(){
        
        if(Greenfoot.mouseClicked(this) && !super.dameBool()){
            this.rota();
        }
        
       if(super.dameBool() && !super.checaPiedra()){ 
            this.correLava();    
        }
        
       if(x == 9)
            this.correSig();
      
    }
    
    /**
     * regresa el valor de x
    */
    public int dameX(){
        return x;    
    }
   
    /**
     * cambia el valor de lava desde recta
     */
    public void cambiaLava(){
        super.cambiaBool();    
    }
    
    /**
     * Funcion que simula el corrimiento de la lava su cambiando la imagen del objeto
     */
    
    public void correLava(){
        Mundo mundo;
        mundo = (Mundo)getWorld();
        GreenfootImage img;
        
        if(x == 0){ 
            t = System.currentTimeMillis();
            x = 1;
            if(this.damePos() == 1 && this.dameDir() == 1){
                    this.turn(180);
            }        
            if((this.damePos() == 0 && this.dameDir() == 1)){
                    this.turn(180);
            }
        }
        if(x < 9){
            if( ((System.currentTimeMillis()-t)/mundo.dameVel()) >= 1 ){
                        t = System.currentTimeMillis();
                        this.setImage(mundo.dameRecta(x));
                        switch(this.damePos()){
                            case(0):
                                if(this.dameDir() == 0){
                                    this.setImage(mundo.dameRecta(x));
                                }
                                if(this.dameDir() == 1){
                                    img=mundo.dameRecta(x);
                                    //img.mirrorHorizontally();
                                    this.setImage(img);
                                }
                                break;
                                
                            case(1):
                                if(this.dameDir() == 0){
                                    img=mundo.dameRecta(x);
                                    //img.mirrorVertically();
                                    this.setImage(img);
                                }
                                if(this.dameDir() == 1){
                                    this.setImage(mundo.dameRecta(x));
                                }
                                break;
                        }
                        x++;
            }
        }
        
    }    
    
    /**
     * gira el camino de la lava
     */
    public void rota(){
                if(super.damePos() == 0){
                    super.tomaPos(1);
                    this.turn(90);
                }
                else{
                    super.tomaPos(0);
                    this.turn(-90);
                }
    }
    
   
    /**
     * selecciona e inicializa los para metros del proximo tramo de camino, en caso de que se 
     * tenga un camino para continuar se regresa un valor de false
     */
    public boolean correSig(){
        List<Camino> vecinos = this.getNeighbours(1, false, Camino.class);
        Mundo mundo;
        mundo = (Mundo)getWorld();
        
        switch(super.damePos()){
            
            case(0):
                    for(Camino it: vecinos){
                        if((super.dameDir() == 0 && it.getX() == (this.getX()+1)) && ((it.damePos() == 0 || it.damePos() == 2) || it.damePos() == 5)){
                            it.cambiaBool();
                            if(it.damePos() == 5){
                                it.tomaDir(1);    
                            }
                            else{
                                it.tomaDir(0);    
                            }
                            return true;
                        }
                        
                        if((super.dameDir() == 1 && it.getX() == (this.getX()-1) ) && ((it.damePos() == 0 || it.damePos() == 3) || it.damePos() == 4) ){
                            it.cambiaBool();
                            if(it.damePos() == 4){
                                it.tomaDir(0);
                            }
                            else{
                                it.tomaDir(1);
                            }
                            return true;   
                        }
                    }
                break;
              
            case(1):
                    for(Camino it: vecinos){
                        if((super.dameDir() == 0 && it.getY() == (this.getY()+1)) && ((it.damePos() == 2 || it.damePos() == 3) || it.damePos() == 1 ) ){
                            it.cambiaBool();
                            if(it.damePos() == 2){
                               it.tomaDir(1); 
                            }
                            else{
                                it.tomaDir(0);
                            }
                            return true;
                        }
                        
                        if( (super.dameDir() == 1 && it.getY() ==(this.getY()-1)) && ( (it.damePos() == 1 || it.damePos() == 4) || it.damePos() == 5 ) ){
                            it.cambiaBool();
                            if(it.damePos() == 5){
                                it.tomaDir(0);
                            }
                            else{
                                it.tomaDir(1);
                            }
                            
                            return true;
                        }
                    }
                break;
        }
        
        mundo.cPierde();
        return false;
    }
}
